Record Locking
Description
Alpha Anywhere places a lock on a record when:
a user starts changing a record, or entering a new record
the user commits the changes
There is no need for the end user to explicitly lock and unlock records. You can test if a record is locked by using <tbl>.IS_RECORD_LOCKED().
Open 2 the same table twice. Both t1 and t2 point to the same record.
t1 = table.open("customer") ? t1.recno() = 1 t2 = table.open("customer") ? t2.recno() = 1
Note how the <tbl>.CHANGE_BEGIN() used by t1 method locks the record for t2.
? t1.is_record_locked() = .F. t1.change_begin() ? t2.is_record_locked() = .T.
When t2 uses <tbl>.CHANGE_BEGIN() an error results because the record is locked by t1.
t2.change_begin() ERROR: The process cannot access the file because another process has locked a portion of the file. customer.DBF
The use of <tbl>.CHANGE_END() by t1 releases the lock.
t1.change_end() ? t2.is_record_locked() = .F.
Now t2 can go into change mode without causing an error.
t2.change_begin() t2.change_end()
Example
Change the value in the COUNTRY field. If already in Change mode then do not change record.
'Create an object pointer to the current table tbl = table.current() if tbl.mode_get()> 0 then 'Compute the Message Type code code = UI_ATTENTION_SYMBOL ui_msg_box("Warning", "Already in data entry mode.", code) else commit_flag = .T. tbl.change_begin() on error goto error_handler tbl.last_name = "Washington" tbl. first_name = "George" tbl.change_end(commit_flag) end if end error_handler: commit_flag = .F. RESUME NEXT
Same as above example, but uses the newer <tbl>.IS_RECORD_LOCKED() method (introduced in V5), instead of ON ERROR.
'Create an object pointer to the current table tbl = table.current() if tbl.mode_get()> 0 then code = UI_ATTENTION_SYMBOL ui_msg_box("Warning", "Already in data entry mode.", code) else if (tbl.is_record_locked()= .f.) then tbl.change_begin() tbl.last_name = "Washington" tbl. first_name = "George" tbl.change_end(.T.) end if end if end
This next example contrasts the .CHANGE_BEGIN() method (which works with tables "behind the scenes") with the form methods for changing the record that is currently displayed on a form. This script could be on a button on a form. Note that, just as when you are editing data in a form, there is no need to explicitly put the form into change mode. as soon as you change the value property of the Last_name control, the record is automatically placed in change mode.
Last_name.value = "Washington" First_name.value = "George" parent.commit()
Limitations
Desktop applications only. Not available in Community Edition.